package cn.springcloud.api.apiUtils;


import lombok.Data;
import org.apache.poi.hssf.usermodel.*;


/**
 * excel导出工具类
 */
@Data
public class POIUtil {



    /**
     * 常用组件：
     * HSSFWorkbook         excel的文档对象
     * HSSFSheet            excel的表单
     * HSSFRow              excel的行
     * HSSFCell             excel的格子单元
     * HSSFFont             excel字体
     * 样式：
     * HSSFCellStyle        cell样式
     */

    /**
     * 一个Excel文件对应一个workbook，一个workbook中有多个sheet组成，一个sheet是由多个行(row)和列(cell)组成。
     * 那么我们用poi要导出一个Excel表格的正确顺序应该是：
     *
     * 1、用HSSFWorkbook打开或者创建“Excel文件对象”
     * 2、用HSSFWorkbook对象返回或者创建Sheet对象
     * 3、用Sheet对象返回行对象，用行对象得到Cell对象
     * 4、对Cell对象读写。
     * 5、将生成的HSSFWorkbook放入HttpServletResponse中响应到前端页面 （或者输出到文本中）
     */


    /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param workBook HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[]  title, String [][]  values, HSSFWorkbook workBook){
        //初始化表格
        // 第一步，创建一个HSSFWorkbook，对应一个Excel文件
        if(workBook == null){
            workBook = new HSSFWorkbook();
        }
        // 第二步，在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = workBook.createSheet(sheetName);

        // 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(0);
        // 第四步，设置样式
        HSSFCellStyle style = workBook.createCellStyle();
        // 创建一个居中格式
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        HSSFFont font = workBook.createFont();
        font.setFontName("微软雅黑");

        //声明列对象
        HSSFCell cell = null;
        //设置标题
        for(int i=0;i<title.length;i++){
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }

        //创建内容
        for(int i=0;i< values.length;i++){
            // 从第二行开始  （第一行为标题）
            row = sheet.createRow(i+1);

            for(int j=0;j<values[i].length;j++){
                //将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
            }
        }

//        //创建内容
//        HSSFRow row ;
//        for(int i=0;i<mapValues.size();i++){
//            row = sheet.createRow(i+1);
//            int index = 0 ;
//            for (Map.Entry<String, Object> entry : mapValues.get(i).entrySet()) {
//                //将内容按顺序赋给对应的列对象
//                row.createCell(index ++).setCellValue(entry.getValue().toString());
//            }
//        }

        return workBook;
    }



}
